use std::env;
// 增加一个数
fn increase(number: i32) {
    println!("{}", number + 1)
}
// 减小一个数
fn decrease(number: i32) {
    println!("{}", number - 1)
}
// 帮助
fn help() {
    println!(r#"usage:
match_args <string>
    Check whether given string is the answer.
match_args {{increase|decrease}} <integer>
    Increase or decrease given integer by one."#);
}
fn main() {
    let args: Vec<String> = env::args().collect();
    match args.len() {
        //     没有传入参数
        1 => {
            println!("My name is 'match_args'. Try passing some arguments!");
        },
        //     传入了一个参数
        2 => {
            match args[1].parse() {
                Ok(42) => println!("This is the answer!"),
                _ => println!("This is not the answer."),
            }
        },
        //     传入一条命令和一个参数
        3 => {
            let cmd = &args[1];
            let num = &args[2];
            //     解析数字
            let number: i32 = match num.parse() {
                Ok(n) => n,
                Err(_) => {
                    println!("error: second argument not an integer");
                    help();
                    return;
                },
            };
            //     解析命令
            match &cmd[..] {
                "increase" => increase(number),
                "decrease" => decrease(number),
                _ => {
                    println!("error: first argument not a valid command");
                    help();
                }
            };
        },
        //     所有其他情况
        _ => {
            help();
        },
    }
}

///!cargo run -- 42
///!cargo run -- increase 3
///!cargo run -- decrease 3
///!cargo run -- decrease arg
///!cargo run --